package demo;

import org.junit.Test;

import java.util.Comparator;
import java.util.function.Consumer;

/**
 * @author: 默苍璃
 * @date: 2022-03-25 08:13
 * <p>
 * lambda 表达式 基础语法
 */
public class Demo02 {

    /**
     * 语法格式一：无参数，无返回值
     */
    @Test
    public void test1() {

        //jdk 1.7 前，必须是 final
        int num = 0;

        //匿名内部类实现
        Runnable r = new Runnable() {
            @Override
            public void run() {
                System.out.println("Hello World!" + num);
            }
        };
        r.run();

        System.out.println("-------------------------------");

        Runnable r1 = () -> System.out.println("Hello Lambda!");
        r1.run();
    }


    /**
     * 语法格式二：有一个参数，并且无返回值
     * <p>
     * 若只有一个参数，小括号可以省略不写
     */
    @Test
    public void test2() {

        Consumer<String> con1 = (x) -> System.out.println(x);
        con1.accept("我大尚硅谷威武！");

        //若只有一个参数，小括号可以省略不写
        Consumer<String> con = x -> System.out.println(x);
        con.accept("若只有一个参数，小括号可以省略不写！");
    }


    /**
     * 有两个以上的参数，有返回值，并且 Lambda 体中有多条语句
     */
    @Test
    public void test3() {
        Comparator<Integer> com = (x, y) -> {
            System.out.println("函数式接口");
            return Integer.compare(x, y);
        };


        int compare = com.compare(1, 2);
        System.out.println(compare);
    }


    /**
     * 若 Lambda 体中只有一条语句， return 和 大括号都可以省略不写
     */
    @Test
    public void test4() {
        Comparator<Integer> com = (x, y) -> Integer.compare(x, y);

        int compare = com.compare(3, 2);
        System.out.println(compare);
    }


}
